package vip.zhenzicheng.nettybasic.splicing.fixed;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 业务处理
 *
 * @author zhenzicheng
 * @date 2022-06-24 09:26
 */
@ChannelHandler.Sharable
public class FixedLengthServerHandler extends ChannelInboundHandlerAdapter {

  private final AtomicInteger counter = new AtomicInteger(0);

  /*服务端读取到网络数据后的处理*/
  @Override
  public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    ByteBuf in = (ByteBuf) msg;
    String request = in.toString(CharsetUtil.UTF_8);
    System.out.println("Server Accept[" + request
        + "] and the counter is:" + counter.incrementAndGet());
    ctx.writeAndFlush(Unpooled.copiedBuffer(
        FixedLengthEchoServer.RESPONSE.getBytes()));
  }

  /*发生异常后的处理*/
  @Override
  public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    cause.printStackTrace();
    ctx.close();
  }
}
